package zzs.generalframework.console.core.user.userloginweb.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import zzs.generalframework.common.core.user.userloginweb.UserLoginWebBO;
import zzs.generalframework.common.core.user.userloginweb.UserLoginWebInfo;
import zzs.generalframework.common.core.user.userloginweb.UserLoginWebPO;
import zzs.generalframework.console.common.exception.ConsoleException;
import zzs.generalframework.console.common.exception.ConsoleRollbackException;
import zzs.generalframework.console.common.model.ConsoleReturnBO;
import zzs.generalframework.console.common.model.ConsoleReturnBO.ConsoleResult;
import zzs.generalframework.console.core.user.userloginweb.dao.IUserLoginWebDao;
import zzs.generalframework.console.core.user.userloginweb.service.IUserLoginWebService;
import zzs.generalframework.util.core.reflect.BeanUtils;

/**
 * @title
 * @description
 * @project zzs-console
 * @package zzs.generalframework.console.core.user.userloginweb.service.impl
 * @author zzs
 * @date 2018年2月5日
 * @version 1.0
 */
@Service("zzs.generalframework.console.core.user.userloginweb.service.impl.userLoginWebServiceImpl")
public class UserLoginWebServiceImpl implements IUserLoginWebService
{

	private Logger logger = LoggerFactory.getLogger(UserLoginWebServiceImpl.class);
	@Autowired
	BeanUtils beanUtils;
	@Autowired
	IUserLoginWebDao userLoginWebDao;

	@Override
	public ConsoleReturnBO saveUserLoginWeb(UserLoginWebBO userLoginWebBO)
	{
		logger.debug("====保存用户登录信息开始====");
		logger.debug("====保存用户登录信息.入参:UserLoginWebBO=[{}]====", userLoginWebBO);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		UserLoginWebPO userLoginWebPO = new UserLoginWebPO();
		copyUserLoginWebBO2UserLoginWebPO(userLoginWebBO, userLoginWebPO);
		Boolean insertResult = userLoginWebDao.insert(userLoginWebPO);
		if (insertResult)
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		}
		logger.debug("====保存用户登录信息.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====保存用户登录信息结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO saveUserLoginWeb(List<UserLoginWebBO> userLoginWebBOList) throws ConsoleException
	{
		logger.info("====保存用户登录信息列表开始====");
		logger.debug("====保存用户登录信息列表.入参:UserLoginWebBOList=[{}]====", userLoginWebBOList);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		for (UserLoginWebBO itemBO : userLoginWebBOList)
		{
			ConsoleReturnBO itemResult = saveUserLoginWeb(itemBO);
			if (ConsoleResult.FAILD.equals(itemResult.getResult()))
			{
				returnConsoleReturnBO.setResult(ConsoleResult.FAILD);
				returnConsoleReturnBO.setMessage(itemResult.getMessage());
				throw new ConsoleRollbackException(itemResult.getMessage());
			}
		}
		logger.debug("====保存用户登录信息列表.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====保存用户登录信息列表结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO getUserLoginWeb(UserLoginWebInfo userLoginWebInfo)
	{
		logger.info("====获取用户登录信息开始====");
		logger.debug("====获取用户登录信息.入参:UserLoginWebInfo=[{}]====", userLoginWebInfo);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		List<UserLoginWebPO> userLoginWebPOList = userLoginWebDao.select(userLoginWebInfo);
		if (userLoginWebPOList == null || userLoginWebPOList.size() == 0)
		{
			returnConsoleReturnBO.setMessage("未获取到记录");
		}
		else if (userLoginWebPOList.size() == 1)
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
			UserLoginWebBO userLoginWebBO = new UserLoginWebBO();
			copyUserLoginWebPO2UserLoginWebBO(userLoginWebPOList.get(0), userLoginWebBO);
			returnConsoleReturnBO.setReturnObj(userLoginWebBO);
		}
		else
		{
			returnConsoleReturnBO.setMessage("记录不唯一");
			UserLoginWebBO userLoginWebBO = new UserLoginWebBO();
			copyUserLoginWebPO2UserLoginWebBO(userLoginWebPOList.get(0), userLoginWebBO);
			returnConsoleReturnBO.setReturnObj(userLoginWebBO);
		}
		logger.debug("====获取用户登录信息.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====获取用户登录信息结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO listUserLoginWeb(UserLoginWebInfo userLoginWebInfo)
	{
		logger.info("====获取用户登录信息列表开始====");
		logger.debug("====获取用户登录信息列表.入参:UserLoginWebInfo=[{}]====", userLoginWebInfo);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		List<UserLoginWebPO> userLoginWebPOList = userLoginWebDao.select(userLoginWebInfo);
		if (userLoginWebPOList == null || userLoginWebPOList.size() == 0)
		{
			returnConsoleReturnBO.setMessage("未获取到记录");
		}
		else
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
			List<UserLoginWebBO> resultList = new ArrayList<UserLoginWebBO>();
			for (UserLoginWebPO itemPO : userLoginWebPOList)
			{
				UserLoginWebBO itemBO = new UserLoginWebBO();
				copyUserLoginWebPO2UserLoginWebBO(itemPO, itemBO);
				resultList.add(itemBO);
			}
			returnConsoleReturnBO.setReturnObj(resultList);
		}
		logger.debug("====获取用户登录信息列表.出参:ConsoleReturnBO＝[{}]====", returnConsoleReturnBO);
		logger.info("====获取用户登录信息列表结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO updateUserLoginWeb(UserLoginWebBO userLoginWebBO)
	{
		logger.info("====更新用户登录信息开始====");
		logger.debug("====更新用户登录信息.入参:UserLoginWebBO=[{}]====", userLoginWebBO);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		UserLoginWebPO userLoginWebPO = new UserLoginWebPO();
		copyUserLoginWebBO2UserLoginWebPO(userLoginWebBO, userLoginWebPO);
		Boolean updateResult = userLoginWebDao.update(userLoginWebPO);
		if (updateResult)
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		}
		logger.debug("====更新用户登录信息.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====更新用户登录信息结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO updateUserLoginWeb(List<UserLoginWebBO> userLoginWebBOList) throws ConsoleException
	{
		logger.info("====更新用户登录信息列表开始====");
		logger.debug("====更新用户登录信息列表.入参:List<UserLoginWebBO>=[{}]====", userLoginWebBOList);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		for (UserLoginWebBO itemBO : userLoginWebBOList)
		{
			ConsoleReturnBO itemResult = updateUserLoginWeb(itemBO);
			if (ConsoleResult.FAILD.equals(itemResult.getResult()))
			{
				returnConsoleReturnBO.setResult(ConsoleResult.FAILD);
				returnConsoleReturnBO.setMessage(itemResult.getMessage());
				throw new ConsoleRollbackException(itemResult.getMessage());
			}
		}
		logger.debug("====更新用户登录信息列表.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====更新用户登录信息列表结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO removeUserLoginWeb(UserLoginWebBO userLoginWebBO)
	{
		logger.info("====删除用户登录信息开始====");
		logger.debug("====删除用户登录信息.入参:UserLoginWebBO＝[{}]======", userLoginWebBO);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		UserLoginWebPO userLoginWebPO = new UserLoginWebPO();
		copyUserLoginWebBO2UserLoginWebPO(userLoginWebBO, userLoginWebPO);
		Boolean deleteResult = userLoginWebDao.delete(userLoginWebPO);
		if (deleteResult)
		{
			returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		}
		logger.debug("====删除用户登录信息.出参:ConsoleReturnBO=[{}]====", returnConsoleReturnBO);
		logger.info("====删除用户登录信息结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public ConsoleReturnBO removeUserLoginWeb(List<UserLoginWebBO> userLoginWebBOList) throws ConsoleException
	{
		logger.info("====删除用户登录信息列表开始====");
		logger.debug("====删除用户登录信息列表.入参:List<UserLoginWebBO>＝[{}]======", userLoginWebBOList);
		ConsoleReturnBO returnConsoleReturnBO = new ConsoleReturnBO();
		returnConsoleReturnBO.setResult(ConsoleResult.SUCCESS);
		for (UserLoginWebBO itemBO : userLoginWebBOList)
		{
			ConsoleReturnBO itemResult = removeUserLoginWeb(itemBO);
			if (ConsoleResult.FAILD.equals(itemResult.getResult()))
			{
				returnConsoleReturnBO.setResult(ConsoleResult.FAILD);
				returnConsoleReturnBO.setMessage(itemResult.getMessage());
				throw new ConsoleRollbackException(itemResult.getMessage());
			}
		}
		logger.debug("====删除用户登录信息列表.出参:ConsoleReturnBO＝[{}]====", returnConsoleReturnBO);
		logger.info("====删除用户登录信息列表结束====");
		return returnConsoleReturnBO;
	}

	@Override
	public Long countUserLoginWeb(UserLoginWebBO userLoginWebBO)
	{
		logger.info("====统计用户登录信息开始====");
		logger.debug("====统计用户登录信息。入参：UserLoginWebBO＝[{}]======", userLoginWebBO);
		Long returnLong = new Long(0);
		UserLoginWebPO userLoginWebPO = new UserLoginWebPO();
		copyUserLoginWebBO2UserLoginWebPO(userLoginWebBO, userLoginWebPO);
		returnLong = userLoginWebDao.count(userLoginWebPO);
		logger.debug("====统计用户登录信息.出参:Long＝[{}]======", returnLong);
		logger.info("====统计用户登录信息结束====");
		return returnLong;
	}

	private void copyUserLoginWebBO2UserLoginWebPO(UserLoginWebBO userLoginWebBO, UserLoginWebPO userLoginWebPO)
	{
		beanUtils.copyBeanNotNull(userLoginWebBO, userLoginWebPO);
		if (userLoginWebBO.getSysID() != null)
		{
			userLoginWebPO.setSeqID(userLoginWebBO.getSysID());
		}
	}

	private void copyUserLoginWebPO2UserLoginWebBO(UserLoginWebPO userLoginWebPO, UserLoginWebBO userLoginWebBO)
	{
		beanUtils.copyBeanNotNull(userLoginWebPO, userLoginWebBO);
		if (userLoginWebPO.getSeqID() != null)
		{
			userLoginWebBO.setSysID(userLoginWebPO.getSeqID());
		}
	}

}
